package com.raos.quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

/**
 * CronScheduler（任务调度测试类）
 *  案例2-复杂任务
 *    按照复杂时间调度表达式执行任务
 *
 * @author raos
 * @email 991207823@qq.com
 * @date 2021/10/01 20:05
 */
public class CronScheduler {

    public static void main(String[] args) throws SchedulerException {
        // 1.创建一个jobDetail的实例，将该实例与HelloJob Class绑定
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myCronJob")
                .build();
        // 2.创建一个Trigger触发器的实例，定义每2分钟触发一次，每次每5秒钟执行一次且每5秒的第2秒钟执行一次，合计每两分钟执行12次
        // cron 表达式任务触发器可以指定那些时间执行，每次执行几次
        CronTrigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myCronTrigger")
                .withSchedule(CronScheduleBuilder.cronSchedule("2/5 2/2 * * * ? "))
                .build();
        // 3.创建schedule实例
        StdSchedulerFactory factory = new StdSchedulerFactory();
        Scheduler scheduler = factory.getScheduler();
        scheduler.start();
        scheduler.scheduleJob(jobDetail, trigger);
    }

    /**
     * Quartz Cron 表达式支持7个域 ,分别是秒/分/时/日/月/周/年.（其中年是非必须项）
     * 一些表达式案例
     * 0 0 12 * * ?	        | 每天12点运行
     * 0 15 10 ? * *	    | 每天10:15运行
     * 0 15 10 * * ?	    | 每天10:15运行
     * 0 15 10 * * ? *	    | 每天10:15运行
     * 0 15 10 * * ? 2008	| 在2008年的每天10：15运行
     * 0 * 14 * * ?	        | 每天14点到15点之间每分钟运行一次，开始于14:00，结束于14:59。
     * 0 0/5 14 * * ?	    | 每天14点到15点每5分钟运行一次，开始于14:00，结束于14:55。
     * 0 0/5 14,18 * * ?	| 每天14点到15点每5分钟运行一次，此外每天18点到19点每5钟也运行一次。
     * 0 0-5 14 * * ?	    | 每天14:00点到14:05，每分钟运行一次。
     * 0 10,44 14 ? 3 WED	| 3月每周三的14:10分到14:44，每分钟运行一次。
     * 0 15 10 ? * MON-FRI	| 每周一，二，三，四，五的10:15分运行。
     * 0 15 10 15 * ?	    | 每月15日10:15分运行。
     * 0 15 10 L * ?	    | 每月最后一天10:15分运行。
     * 0 15 10 ? * 6L	    | 每月最后一个星期五10:15分运行。
     * 0 15 10 ? * 6L 2007-2009	| 在2007,2008,2009年每个月的最后一个星期五的10:15分运行。
     * 0 15 10 ? * 6#3	    | 每月第三个星期五的10:15分运行。
     */
}
